package com.xbongbong.paas.service;

import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.UserVO;
import com.xbongbong.pro.enums.PackageErrorEnum;
import com.xbongbong.pro.packageInfo.pojo.vo.CheckPackageVO;
import com.xbongbong.sys.domain.entity.CompanyEntity;
import com.xbongbong.sys.domain.entity.UserEntity;

import java.util.Map;

public interface CompanyService {

    /**
     * 获取公司使用人数
     * @param corpid
     * @return
     * @author cp.zhang
     * @date  2016-10-22 上午2:12:06
     */
    Integer getCorpRealUserNum(String corpid);
    /**
     * 检查公司的员工数、部门数是否超过某个临界值，超过则不处理相应逻辑
     *
     * @param corpid 公司id
     * @return true 未超过临界值
     * @throws XbbException
     * @since v3.33
     * @version v3.33
     * @author chuanpeng.zhang
     * 创建时间：2018年10月29日 下午4:24:00
     * 修改时间：
     */
    boolean checkCorpRealNum(String corpid) throws XbbException;


    /**
     * 公司情况与套餐做校验（是原来的isVip方法）
     * @param corpid
     * @return
     * 创建时间 2019/4/19 10:11 AM
     * 修改时间 2019/4/19 10:11 AM
     * @author chy
     * @since v1.0
     * @version v1.0
     */
    CheckPackageVO checkPackage(String corpid);

    /**
     * @Description: 公司情况与套餐做校验（是原来的isVip方法）
     * @param corpId 公司id
     * @param corpUserNum 公司使用员工数
     * @return
     */
    CheckPackageVO checkPackage(String corpId, Integer corpUserNum);
    
    /**
     * 判断群功能是否已经关闭了
     * @param corpid
     * @param userVO
     * @return
     */
    Boolean flagCloseGroup(String corpid, UserVO userVO);
    /**
     * 更新单个公司的company表数据
     *
     * @param updateCorpid
     * @param suiteTokenPerm
     * @author kaka
     * @time 2016年7月27日 下午3:01:56
     */
    CompanyEntity updateCompanyInfo(String updateCorpid, String suiteTokenPerm);

    /**
     * @Description: 获取permanentCode
     * @param corpId 公司id
     * @return
     * 创建时间： 2018-5-8 上午11:25:40
     * 修改时间： 2018-5-8 上午11:25:40 chy
     * @author chy
     * @since v3.21
     * @version v3.21
     */
    String getPermanentCode(String corpId);

    /**
     * 处理错误信息，前端回显使用
     * @param loginUser 登录员工实体
     * @param errorType 错误类型，参考：PackageErrorEnum
     * @return
     * @throws
     * @author hongxiao
     * @date 2019-08-27 09:40
     * @since v4.3.0
     * @version v4.3.0
     */
    JSONObject handlePackageErrorInfo(UserEntity loginUser, Integer errorType);
    
    /**
     * 检查当前公司是否有授权开通群服务的小程序，并检查是否有查看的权限
     * @param corpid
     * @param userId
     * @return
     */
    Integer checkDingtalkBundle(String corpid, String userId);

    /**
     * 获取某公司当前套餐的结束时间，缓存一个小时
     * @param corpid 公司corpid
     * @return 套餐结束时间，缓存一小时
     */
    long getFeeEndTime(String corpid);

}
